package cn.tedu.tmall.admin.mall.service;

import cn.tedu.tmall.admin.mall.pojo.param.GoodsAddNewParam;
import cn.tedu.tmall.admin.mall.pojo.vo.CategoryStandardVO;
import cn.tedu.tmall.admin.mall.pojo.vo.GoodsListItemVO;
import cn.tedu.tmall.common.consts.data.MallConsts;
import cn.tedu.tmall.common.pojo.authentication.CurrentPrincipal;
import cn.tedu.tmall.common.pojo.vo.PageData;

public interface IGoodsService  extends MallConsts {
    /**
     * 查询商品列表
     *
     * @param pageNum  页码
     * @param pageSize 每页记录数
     * @return 商品列表
     */
    PageData<GoodsListItemVO> list(Integer pageNum, Integer pageSize);

    /**
     * 根据类别查询商品列表
     *
     * @param pageNum  页码
     * @param pageSize 每页记录数
     * @return 商品列表
     */
    PageData<GoodsListItemVO> listByCategory(Long categoryId,Integer pageNum, Integer pageSize);

    /**
     * 发布商品
     */
    void add(CurrentPrincipal currentPrincipal, GoodsAddNewParam goodsAddNewParam);

    /**
     * 重建商品的搜索数据（更新ES中的商品数据）
     */
    void rebuildSearch();

    /**
     * 审核通过商品
     *
     * @param currentPrincipal 当事人
     * @param goodsId          尝试审核通过的商品的ID
     * @param remarks          备注信息
     */
    void passCheck(CurrentPrincipal currentPrincipal, Long goodsId, String remarks);

    /**
     * 审核通过商品
     *
     * @param currentPrincipal 当事人
     * @param goodsId          尝试审核通过的商品的ID
     * @param remarks          备注信息
     */
    void rejectCheck(CurrentPrincipal currentPrincipal, Long goodsId,String remarks);

    /**
     * 上架商品
     *
     * @param currentPrincipal 当事人
     * @param id               商品ID
     */
    void putOn(CurrentPrincipal currentPrincipal,Long id);

    /**
     * 下架商品
     *
     * @param currentPrincipal 当事人
     * @param id               商品ID
     */
    void pullOff(CurrentPrincipal currentPrincipal, Long id);

    /**
     * 推荐商品
     *
     * @param currentPrincipal 当事人
     * @param id               商品ID
     */
    void setRecommend(CurrentPrincipal currentPrincipal,Long id);

    /**
     * 取消推荐商品
     *
     * @param currentPrincipal 当事人
     * @param id               商品ID
     */
    void cancelRecommend(CurrentPrincipal currentPrincipal,Long id);
}
